package org.example.com.kotlinlab.delegate.class_delegate.demo03

/**
 * 重写的成员不会在委托对象的成员中调用 ，
 * 委托对象的成员只能访问其自身对接口成员实现
 */

interface Base {
    val message: String
    fun print()
}

class BaseImpl(val x: Int) : Base {
    override val message: String
        get() = "BaseImpl: x = $x"

    override fun print() {
        println(message)
    }
}

class Derived(val b: Base) : Base by b {
    override val message: String
        get() = "Message of Derived"
}

fun main() {
    val b = BaseImpl(10)
    val derived = Derived(b)
    //print()方法中访问的message，是传入的被代理对象的message，即BaseImpl类的
    derived.print()
    //derived.message 访问的是Derived类中的message
    println(derived.message)

}